-- *****************************************************************
-- REDSTONE-PING-MIB
--
-- Implementation of the IETF's Distributed Management group for
-- the Remote Ping operation, folded into the Redstone enterprise.
-- 
-- *****************************************************************

--
-- This document is the enterprise implementation of the Remote Ping
-- MIB, on its 8th draft revision. In order to avoid naming and oid
-- conflicts, all objects had the "rs" prefix added, and the ping
-- subtree had been moved into the Redstone enterprise. The intent
-- is to offer support to the ping mib as soon as it becomes an RFC,
-- as well as this particular revision.
--

REDSTONE-PING-MIB DEFINITIONS ::= BEGIN

IMPORTS
   MODULE-IDENTITY, OBJECT-TYPE, Integer32,
   Unsigned32,
   NOTIFICATION-TYPE, OBJECT-IDENTITY
       FROM SNMPv2-SMI                  -- RFC2578
   TEXTUAL-CONVENTION, RowStatus,
   StorageType, DateAndTime, TruthValue
       FROM SNMPv2-TC                   -- RFC2579
   MODULE-COMPLIANCE, OBJECT-GROUP,
   NOTIFICATION-GROUP
       FROM SNMPv2-CONF                 -- RFC2580
   InterfaceIndexOrZero                 -- RFC2233
       FROM IF-MIB
   SnmpAdminString
       FROM SNMP-FRAMEWORK-MIB          -- RFC2571
   rsMgmt
       FROM REDSTONE-SMI;

rsPingMIB MODULE-IDENTITY
   LAST-UPDATED "200003010000Z"         -- 1 March 2000
   ORGANIZATION "Unisphere Solutions Inc."
   CONTACT-INFO
        "
        Unisphere Solutions, Inc.
        5 Carlisle Road
        Westford MA 01886
        USA

        Tel:    +1-978-692-1999
        Email:  mib@redstonecom.com

        This is a modified version of the IETF Distributed
        Management Working Group for the DISMAN-PING-MIB.
        Once the DISMAN-PING-MIB becomes a RFC, both standard
        and this MIB will be supported. For more details about
        IETF Distributed Management group, visit:
        http://www.ietf.org/html.charters/disman-charter.html
        "
   DESCRIPTION
       "The rsPing MIB (REDSTONE-PING-MIB) provides the capability of
       controlling the use of the ping function at a remote
       host."

    --  Revision history

    REVISION     "200003010000Z"         -- 1 March 2000
    DESCRIPTION
        "Initial version, created from Internet-Draft, revision 8."
   ::= { rsMgmt 39 }

-- Textual Conventions

RsPingInetAddressType ::= TEXTUAL-CONVENTION
   STATUS  current
   DESCRIPTION
       "A value that represents a type of Internet address.
         unknown(0)  An unknown address type. This value MUST
                    be used if the value of the corresponding
                    RsPingInetAddress object is a zero-length string.
                    It may also be used to indicate an IP address
                    which is not in one of the formats defined
                    below.
         ipv4(1)     An IPv4 address as defined by the
                    InetAddressIPv4 textual convention.
         ipv6(2)     An IPv6 address as defined by the
                    InetAddressIPv6 textual convention.
         dns(16)     A DNS domain name as defined by the
                    InetAddressDNS textual convention.
         Each definition of a concrete RsPingInetAddressType value must be
        accompanied by a definition of a textual convention for use
        with that RsPingInetAddressType.
        The RsPingInetAddressType textual convention SHOULD NOT be subtyped
        in object type definitions to support future extensions. It
        MAY be subtyped in compliance statements in order to require
        only a subset of these address types for a compliant
        implementation."
   SYNTAX      INTEGER {
                   unknown(0),
                   ipv4(1),
                   ipv6(2),
                   dns(16)     -- align with AddressFamilyNumbers in
               }               -- IANA-ADDRESS-FAMILY-NUMBERS-MIB

RsPingInetAddress ::= TEXTUAL-CONVENTION
   STATUS  current
   DESCRIPTION
       "Denotes a generic Internet address.
        An RsPingInetAddress value is always interpreted within the
        context of an RsPingInetAddressType value. The RsPingInetAddressType
        object which defines the context must be registered
        immediately before the object which uses the RsPingInetAddress
        textual convention. In other words, the object identifiers
        for the RsPingInetAddressType object and the RsPingInetAddress object
        MUST have the same length and the last sub-identifier of
        the RsPingInetAddressType object MUST be 1 less than the last
        sub-identifier of the RsPingInetAddress object.
        When this textual convention is used as the syntax of an
        index object, there may be issues with the limit of 128
        sub-identifiers specified in SMIv2, STD 58. In this case,
        the OBJECT-TYPE declaration MUST include a 'SIZE' clause
        to limit the number of potential instance sub-identifiers."
   SYNTAX      OCTET STRING (SIZE (0..255))

RsPingOperationResponseStatus ::= TEXTUAL-CONVENTION
   STATUS  current
   DESCRIPTION
      "Used to report the result of an operation:

        responseReceived(1) - Operation completes successfully.
        unknown(2) - Operation failed due to unknown error.
        internalError(3) - An implementation detected an error
             in its own processing that caused an operation
             to fail.
        requestTimedOut(4) - Operation failed to receive a
             valid reply within the time limit imposed on it.
        unknownDestinationAddress(5) - Invalid destination
             address.
        noRouteToTarget(6) - Could not find a route to target.
        interfaceInactiveToTarget(7) - The interface to be
             used in sending a probe is inactive without an
             alternate route existing.
        arpFailure(8) - Unable to resolve a target address to a
             media specific address.
        maxConcurrentLimitReached(9)F - The maximum number of
             concurrent active operations would have been exceeded
             if the corresponding operation was allowed.
        unableToResolveDnsName(10) - The DNS name specified was
             unable to be mapped to an IP address.
        invalidHostAddress(11) - The IP address for a host
             has been determined to be invalid.  Examples of this
             are broadcast or multicast addresses."

   SYNTAX INTEGER {
                responseReceived(1),
                unknown(2),
                internalError(3),
                requestTimedOut(4),
                unknownDestinationAddress(5),
                noRouteToTarget(6),
                interfaceInactiveToTarget(7),
                arpFailure(8),
                maxConcurrentLimitReached(9),
                unableToResolveDnsName(10),
                invalidHostAddress(11)
          }

-- Top level structure of the MIB

rsPingNotifications              OBJECT IDENTIFIER ::= { rsPingMIB 0 }
rsPingObjects                    OBJECT IDENTIFIER ::= { rsPingMIB 1 }
rsPingConformance                OBJECT IDENTIFIER ::= { rsPingMIB 2 }


-- The registration node (point) for rsPing implementation types

rsPingImplementationTypeDomains  OBJECT IDENTIFIER ::= { rsPingMIB 3 }

rsPingIcmpEcho OBJECT-IDENTITY
   STATUS      current
   DESCRIPTION
       "Indicates that an implementation is using the Internet
       Control Message Protocol (ICMP) 'ECHO' facility."
   ::= { rsPingImplementationTypeDomains 1 }

rsPingUdpEcho OBJECT-IDENTITY
   STATUS      current
   DESCRIPTION
       "Indicates that an implementation is using the UDP echo
       port (7)."
   REFERENCE
       "RFC 862, 'Echo Protocol'."
   ::= { rsPingImplementationTypeDomains 2 }

rsPingSnmpQuery OBJECT-IDENTITY
   STATUS      current
   DESCRIPTION
       "Indicates that an implementation is an SNMP query to
       calculate a round trip time."
   ::= { rsPingImplementationTypeDomains 3 }

rsPingTcpConnectionAttempt OBJECT-IDENTITY
   STATUS      current
   DESCRIPTION
       "Indicates that an implementation is attempting to
       connect to a TCP port in order to calculate a round
       trip time."
   ::= { rsPingImplementationTypeDomains 4 }


-- Simple Object Definitions

rsPingMaxConcurrentRequests OBJECT-TYPE
   SYNTAX      Unsigned32
   UNITS       "requests"
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "The maximum number of concurrent active rsPing requests
      that are allowed within an agent implementation.  A value
      of 0 for this object implies that there is no limit for
      the number of concurrent active requests in effect."
   DEFVAL { 10 }
   ::= { rsPingObjects 1 }

-- RsPing Control Table

rsPingCtlTable OBJECT-TYPE
   SYNTAX      SEQUENCE OF RsPingCtlEntry
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
       "Defines the rsPing Control Table for providing, via SNMP,
       the capability of performing rsPing operations at
       a remote host.  The results of these operations are
       stored in the rsPingResultsTable and the
       rsPingProbeHistoryTable."
  ::= { rsPingObjects 2 }

rsPingCtlEntry OBJECT-TYPE
   SYNTAX      RsPingCtlEntry
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
       "Defines an entry in the rsPingCtlTable.  The first index
       element, rsPingCtlOwnerIndex, is of type SnmpAdminString,
       a textual convention that allows for use of the SNMPv3
       View-Based Access Control Model (RFC 2575 [11], VACM)
       and allows an management application to identify its
       entries.  The second index, rsPingCtlTestName (also an
       SnmpAdminString), enables the same management
       application to have multiple outstanding requests."
   INDEX {
            rsPingCtlOwnerIndex,
            rsPingCtlTestName
         }
   ::= { rsPingCtlTable 1 }

RsPingCtlEntry ::=
   SEQUENCE {
       rsPingCtlOwnerIndex             SnmpAdminString,
       rsPingCtlTestName               SnmpAdminString,
       rsPingCtlTargetAddressType      RsPingInetAddressType,
       rsPingCtlTargetAddress          RsPingInetAddress,
       rsPingCtlDataSize               Unsigned32,
       rsPingCtlTimeOut                Unsigned32,
       rsPingCtlProbeCount             Unsigned32,
       rsPingCtlAdminStatus            INTEGER,
       rsPingCtlDataFill               OCTET STRING,
       rsPingCtlFrequency              Unsigned32,
       rsPingCtlMaxRows                Unsigned32,
       rsPingCtlStorageType            StorageType,
       rsPingCtlTrapGeneration         BITS,
       rsPingCtlTrapProbeFailureFilter Unsigned32,
       rsPingCtlTrapTestFailureFilter  Unsigned32,
       rsPingCtlType                   OBJECT IDENTIFIER,
       rsPingCtlDescr                  SnmpAdminString,
       rsPingCtlSourceAddressType      RsPingInetAddressType,
       rsPingCtlSourceAddress          RsPingInetAddress,
       rsPingCtlIfIndex                InterfaceIndexOrZero,
       rsPingCtlByPassRouteTable       TruthValue,
       rsPingCtlDSField                Unsigned32,
       rsPingCtlRowStatus              RowStatus
   }

rsPingCtlOwnerIndex OBJECT-TYPE
   SYNTAX      SnmpAdminString (SIZE(0..32))
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
      "To facilitate the provisioning of access control by a
      security administrator using the View-Based Access
      Control Model (RFC 2575, VACM) for tables in which
      multiple users may need to independently create or
      modify entries, the initial index is used as an 'owner
      index'.  Such an initial index has a syntax of
      SnmpAdminString, and can thus be trivially mapped to a
      securityName or groupName as defined in VACM, in
      accordance with a security policy.

      When used in conjunction with such a security policy all
      entries in the table belonging to a particular user (or
      group) will have the same value for this initial index.
      For a given user's entries in a particular table, the
      object identifiers for the information in these entries
      will have the same subidentifiers (except for the 'column'
      subidentifier) up to the end of the encoded owner index.
      To configure VACM to permit access to this portion of the
      table, one would create vacmViewTreeFamilyTable entries
      with the value of vacmViewTreeFamilySubtree including
      the owner index portion, and vacmViewTreeFamilyMask
      'wildcarding' the column subidentifier.  More elaborate
      configurations are possible."
   ::= { rsPingCtlEntry 1 }

rsPingCtlTestName OBJECT-TYPE
   SYNTAX      SnmpAdminString (SIZE(0..32))
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
       "The name of the rsPing test.  This is locally unique, within
       the scope of an rsPingCtlOwnerIndex."
   ::= { rsPingCtlEntry 2 }

rsPingCtlTargetAddressType OBJECT-TYPE
   SYNTAX      RsPingInetAddressType
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "Specifies the type of host address to be used at a remote host
       for performing a rsPing operation."
   DEFVAL { unknown }
   ::= { rsPingCtlEntry 3 }

rsPingCtlTargetAddress OBJECT-TYPE
   SYNTAX      RsPingInetAddress
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "Specifies the host address to be used at a remote host for
       performing a rsPing operation.  The host address type is
       determined by the object value of corresponding
       rsPingCtlTargetAddressType.

       A value for this object MUST be set prior to transitioning
       its corresponding rsPingCtlEntry to active(1) via
       rsPingCtlRowStatus."
   DEFVAL { ''H }
   ::= { rsPingCtlEntry 4 }

rsPingCtlDataSize OBJECT-TYPE
   SYNTAX      Unsigned32 (0..65507)
   UNITS       "octets"
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "Specifies the size of the data portion to be
       transmitted in a rsPing operation in octets.  A rsPing
       request is usually an ICMP message encoded
       into an IP packet.  An IP packet has a maximum size
       of 65535 octets.  Subtracting the size of the ICMP
       or UDP header (both 8 octets) and the size of the IP
       header (20 octets) yields a maximum size of 65507
       octets."
   DEFVAL { 0 }
   ::= { rsPingCtlEntry 5 }

rsPingCtlTimeOut OBJECT-TYPE
   SYNTAX      Unsigned32 (1..60)
   UNITS       "seconds"
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "Specifies the time-out value, in seconds, for a
       remote rsPing operation."
   DEFVAL { 3 }
   ::= { rsPingCtlEntry 6 }

rsPingCtlProbeCount OBJECT-TYPE
   SYNTAX      Unsigned32 (1..15)
   UNITS       "probes"
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "Specifies the number of times to perform a rsPing
       operation at a remote host."
   DEFVAL { 1 }
   ::= { rsPingCtlEntry 7 }

rsPingCtlAdminStatus OBJECT-TYPE
   SYNTAX      INTEGER {
                         enabled(1), -- test should be started
                         disabled(2) -- test should be stopped
                       }
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "Reflects the desired state that a rsPingCtlEntry should be
       in:

          enabled(1)  - Attempt to activate the test as defined by
                        this rsPingCtlEntry.
          disabled(2) - Deactivate the test as defined by this
                        rsPingCtlEntry.

       Refer to the corresponding rsPingResultsOperStatus to
       determine the operational state of the test defined by
       this entry."
    DEFVAL { disabled }
   ::= { rsPingCtlEntry 8 }

rsPingCtlDataFill  OBJECT-TYPE
   SYNTAX      OCTET STRING (SIZE(0..1024))
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "The content of this object is used together with the
       corresponding rsPingCtlDataSize value to determine how to
       fill the data portion of a probe packet.  The option of
       selecting a data fill pattern can be useful when links
       are compressed or have data pattern sensitivities. The
       contents of rsPingCtlDataFill should be repeated in a rsPing
       packet when the size of the data portion of the rsPing
       packet is greater than the size of rsPingCtlDataFill."
   DEFVAL { '00'H }
   ::= { rsPingCtlEntry 9 }

rsPingCtlFrequency  OBJECT-TYPE
   SYNTAX      Unsigned32
   UNITS       "seconds"
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "The number of seconds to wait before repeating a rsPing test
       as defined by the value of the various objects in the
       corresponding row.

       A single rsPing test consists of a series of rsPing probes.
       The number of probes is determined by the value of the
       corresponding rsPingCtlProbeCount object.  After a single
       test completes the number of seconds as defined by the
       value of rsPingCtlFrequency MUST elapse before the
       next rsPing test is started.

       A value of 0 for this object implies that the test
       as defined by the corresponding entry will not be
       repeated."
   DEFVAL { 0 }
   ::= { rsPingCtlEntry 10 }

rsPingCtlMaxRows OBJECT-TYPE
   SYNTAX      Unsigned32
   UNITS       "rows"
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "The maximum number of entries allowed in the
       rsPingProbeHistoryTable.  An implementation of this
       MIB will remove the oldest entry in the
       rsPingProbeHistoryTable to allow the addition of an
       new entry once the number of rows in the
       rsPingProbeHistoryTable reaches this value.

       Old entries are not removed when a new test is
       started.  Entries are added to the rsPingProbeHistoryTable
       until rsPingCtlMaxRows is reached before entries begin to
       be removed.

       A value of 0 for this object disables creation of
       rsPingProbeHistoryTable entries."
   DEFVAL      { 50 }
   ::= { rsPingCtlEntry 11 }

rsPingCtlStorageType OBJECT-TYPE
   SYNTAX      StorageType
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "The storage type for this conceptual row.
       Conceptual rows having the value 'permanent' need not
       allow write-access to any columnar objects in the row."
   DEFVAL { nonVolatile }
   ::= { rsPingCtlEntry 12 }

rsPingCtlTrapGeneration OBJECT-TYPE
   SYNTAX      BITS {
                  probeFailure(0),
                  testFailure(1),
                  testCompletion(2)
                 }
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "The value of this object determines when and if
       to generate a notification for this entry:

       probeFailure(0)   - Generate a rsPingProbeFailed
           notification subject to the value of
           rsPingCtlTrapProbeFailureFilter.  The object
           rsPingCtlTrapProbeFailureFilter can be used
           to specify the number of successive probe failures
           that are required before a rsPingProbeFailed
           notification can be generated.
       testFailure(1)    - Generate a rsPingTestFailed
           notification. In this instance the object
           rsPingCtlTrapTestFailureFilter can be used to
           determine the number of probe failures that
           signal when a test fails.
       testCompletion(2) - Generate a rsPingTestCompleted
           notification.

       The value of this object defaults to zero, indicating
       that none of the above options have been selected."
   ::= { rsPingCtlEntry 13 }

rsPingCtlTrapProbeFailureFilter OBJECT-TYPE
   SYNTAX      Unsigned32 (0..15)
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "The value of this object is used to determine when
       to generate a rsPingProbeFailed NOTIFICATION.

       Setting rsPingCtlTrapGeneration
       to probeFailure(0) implies that a rsPingProbeFailed
       NOTIFICATION is generated only when the number of
       successive probe failures as indicated by the
       value of rsPingCtlTrapPrbefailureFilter fail within
       a given rsPing test."
   DEFVAL { 1 }
   ::= { rsPingCtlEntry 14 }

rsPingCtlTrapTestFailureFilter OBJECT-TYPE
   SYNTAX      Unsigned32 (0..15)
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "The value of this object is used to determine when
       to generate a rsPingTestFailed NOTIFICATION.

       Setting rsPingCtlTrapGeneration to testFailure(1)
       implies that a rsPingTestFailed NOTIFICATION is
       generated only when the number of rsPing failures
       within a test exceed the value of
       rsPingCtlTrapTestFailureFilter."
   DEFVAL { 1 }
   ::= { rsPingCtlEntry 15 }

rsPingCtlType OBJECT-TYPE
   SYNTAX      OBJECT IDENTIFIER
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "The value of this object is used to either report or
       select the implementation method to be used for
       calculating a rsPing response time.  The value of this
       object MAY be selected from rsPingImplementationTypeDomains.

       Additional implementation types SHOULD be allocated as
       required by implementers of the REDSTONE-PING-MIB under
       their enterprise specific registration point and not
       beneath rsPingImplementationTypeDomains."
   DEFVAL { rsPingIcmpEcho }
   ::= { rsPingCtlEntry 16 }

rsPingCtlDescr OBJECT-TYPE
   SYNTAX      SnmpAdminString
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "The purpose of this object is to provide a
       descriptive name of the remote rsPing test."
   DEFVAL { '00'H }
   ::= { rsPingCtlEntry 17 }

rsPingCtlSourceAddressType OBJECT-TYPE
   SYNTAX      RsPingInetAddressType
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "Specifies the type of the source address,
       rsPingCtlSourceAddress, to be used at a remote host
       when performing a rsPing operation."
   DEFVAL { ipv4 }
   ::= { rsPingCtlEntry 18 }

 rsPingCtlSourceAddress OBJECT-TYPE
   SYNTAX      RsPingInetAddress
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "Use the specified IP address (which must be given
       in numeric form, not as a hostname) as the source
       address in outgoing probe packets.  On hosts with
       more than one IP address, this option can be used
       to force the source address to be something other
       than the primary IP address of the interface the
       probe packet is sent on.  If the IP address is not
       one of this machine's interface addresses, an error
       is returned and nothing is sent.  A zero length
       octet string value for this object disables source
       address specification.

       The address type (RsPingInetAddressType) that relates to
       this object is specified by the corresponding value
       of rsPingCtlSourceAddressType."
   DEFVAL { ''H }
   ::= { rsPingCtlEntry 19 }

rsPingCtlIfIndex OBJECT-TYPE
   SYNTAX      InterfaceIndexOrZero
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "Setting this object to an interface's ifIndex prior
       to starting a remote rsPing operation directs
       the rsPing probes to be transmitted over the
       specified interface.  A value of zero for this object
       means that this option is not enabled."
   DEFVAL { 0 }
   ::= { rsPingCtlEntry 20 }

rsPingCtlByPassRouteTable OBJECT-TYPE
   SYNTAX TruthValue
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
      "The purpose of this object is to optionally enable
      bypassing the route table.  If enabled, the remote
      host will bypass the normal routing tables and send
      directly to a host on an attached network.  If the
      host is not on a directly-attached network, an
      error is returned.  This option can be used to perform
      the rsPing operation to a local host through an
      interface that has no route defined (e.g., after the
      interface was dropped by routed)."
   DEFVAL { false }
   ::= { rsPingCtlEntry 21 }

rsPingCtlDSField OBJECT-TYPE
   SYNTAX      Unsigned32 (0..255)
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "Specifies the value to store in the Differentiated
       Services (DS) Field in the IP packet used to
       encapsulate the rsPing probe.  The DS Field is defined
       as the Type of Service (TOS) octet in a IPv4 header
       or as the Traffic Class octet in a IPv6 header.

       The value of this object must be a decimal integer
       in the range from 0 to 255.  This option can be used
       to determine what effect an explicit DS Field setting
       has on a rsPing response.  Not all values are legal or
       meaningful.  A value of 0 means that the function
    represented by this option is not supported.  DS Field
    usage is often not supported by IP implementations and
    not all values are supported.  Refer to RFC 2474 for
    guidance on usage of this field."
   REFERENCE
       "Refer to RFC 2474 for the definition of the
       Differentiated Services Field and to RFC 1812
       Section 5.3.2 for Type of Service (TOS)."
   DEFVAL { 0 }
   ::= { rsPingCtlEntry 22 }

rsPingCtlRowStatus OBJECT-TYPE
   SYNTAX      RowStatus
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
       "This object allows entries to be created and deleted
       in the rsPingCtlTable.  Deletion of an entry in this
       table results in all corresponding (same
       rsPingCtlOwnerIndex and rsPingCtlTestName index values)
       rsPingResultsTable and rsPingProbeHistoryTable entries
       being deleted.

       A value MUST be specified for rsPingCtlTargetAddress
       prior to a transition to active(1) state being
       accepted.

       Activation of a remote rsPing operation is controlled
       via rsPingCtlAdminStatus and not by changing
       this object's value to active(1).

       Transitions in and out of active(1) state are not
       allowed while an entry's rsPingResultsOperStatus is
       active(1) with the exception that deletion of
       an entry in this table by setting its RowStatus
       object to destroy(6) will stop an active
       rsPing operation.

       The operational state of a rsPing operation
       can be determined by examination of its
       rsPingResultsOperStatus object."
   REFERENCE
       "See definition of RowStatus in RFC 2579, 'Textual
       Conventions for SMIv2.'"
   ::= { rsPingCtlEntry 23 }

-- RsPing Results Table

rsPingResultsTable OBJECT-TYPE
   SYNTAX      SEQUENCE OF RsPingResultsEntry
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
       "Defines the RsPing Results Table for providing
       the capability of performing rsPing operations at
       a remote host.  The results of these operations are
       stored in the rsPingResultsTable and the rsPingPastProbeTable.

       An entry is added to the rsPingResultsTable when an
       rsPingCtlEntry is started by successful transition
       of its rsPingCtlAdminStatus object to enabled(1).
       An entry is removed from the rsPingResultsTable when
       its corresponding rsPingCtlEntry is deleted."
  ::= { rsPingObjects 3 }

rsPingResultsEntry OBJECT-TYPE
   SYNTAX      RsPingResultsEntry
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
       "Defines an entry in the rsPingResultsTable.  The
       rsPingResultsTable has the same indexing as the
       rsPingCtlTable in order for a rsPingResultsEntry to
       correspond to the rsPingCtlEntry that caused it to
       be created."
   INDEX {
            rsPingCtlOwnerIndex,
            rsPingCtlTestName
         }
   ::= { rsPingResultsTable 1 }

RsPingResultsEntry ::=
   SEQUENCE {
       rsPingResultsOperStatus          INTEGER,
       rsPingResultsIpTargetAddressType RsPingInetAddressType,
       rsPingResultsIpTargetAddress     RsPingInetAddress,
       rsPingResultsMinRtt              Unsigned32,
       rsPingResultsMaxRtt              Unsigned32,
       rsPingResultsAverageRtt          Unsigned32,
       rsPingResultsProbeResponses      Unsigned32,
       rsPingResultsSentProbes          Unsigned32,
       rsPingResultsRttSumOfSquares     Unsigned32,
       rsPingResultsLastGoodProbe       DateAndTime
    }

rsPingResultsOperStatus OBJECT-TYPE
   SYNTAX      INTEGER {
                         enabled(1),  -- test is in progress
                         disabled(2)  -- test has stopped
                       }
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "Reflects the operational state of a rsPingCtlEntry:

          enabled(1)   - Test is active.
          disabled(2)  - Test has stopped."
   ::= { rsPingResultsEntry 1 }

rsPingResultsIpTargetAddressType OBJECT-TYPE
   SYNTAX      RsPingInetAddressType
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "This objects indicates the type of address stored
       in the corresponding rsPingResultsIpTargetAddress
       object."
   DEFVAL { unknown }
   ::= { rsPingResultsEntry 2 }

rsPingResultsIpTargetAddress OBJECT-TYPE
   SYNTAX      RsPingInetAddress
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "This objects reports the IP address associated
       with a rsPingCtlTargetAddress value when the destination
       address is specified as a DNS name.  The value of
       this object should be a zero length octet string
       when a DNS name is not specified or when a
       specified DNS name fails to resolve."
   DEFVAL { ''H }
   ::= { rsPingResultsEntry 3 }

rsPingResultsMinRtt OBJECT-TYPE
   SYNTAX      Unsigned32
   UNITS       "milliseconds"
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "The minimum rsPing round-trip-time (RTT) received.  A value
       of 0 for this object implies that no RTT has been received."
   ::= { rsPingResultsEntry 4 }

rsPingResultsMaxRtt OBJECT-TYPE
   SYNTAX      Unsigned32
   UNITS       "milliseconds"
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "The maximum rsPing round-trip-time (RTT) received.  A value
       of 0 for this object implies that no RTT has been received."
   ::= { rsPingResultsEntry 5 }

rsPingResultsAverageRtt OBJECT-TYPE
   SYNTAX      Unsigned32
   UNITS       "milliseconds"
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "The current average rsPing round-trip-time (RTT)."
   ::= { rsPingResultsEntry 6 }

rsPingResultsProbeResponses OBJECT-TYPE
   SYNTAX      Unsigned32
   UNITS       "responses"
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "Number of responses received for the corresponding
       rsPingCtlEntry and rsPingResultsEntry.  The value of this object
       MUST be reported as 0 when no probe responses have been
       received."
   ::= { rsPingResultsEntry 7 }

rsPingResultsSentProbes OBJECT-TYPE
   SYNTAX      Unsigned32
   UNITS       "probes"
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "The value of this object reflects the number of probes sent
       for the corresponding rsPingCtlEntry and rsPingResultsEntry.
       The value of this object MUST be reported as 0 when no probes
       have been sent."
   ::= { rsPingResultsEntry 8 }

rsPingResultsRttSumOfSquares OBJECT-TYPE
   SYNTAX      Unsigned32
   UNITS       "milliseconds"
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "This object contains the sum of the squares for all rsPing
       responses received.  Its purpose is to enable standard
       deviation calculation.  The value of this object MUST
       be reported as 0 when no rsPing responses have been
       received."
   ::= { rsPingResultsEntry 9 }

rsPingResultsLastGoodProbe OBJECT-TYPE
   SYNTAX      DateAndTime
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "Date and time when the last response was received for
       a probe."
   ::= { rsPingResultsEntry 10 }


-- RsPing Probe History Table

rsPingProbeHistoryTable OBJECT-TYPE
   SYNTAX      SEQUENCE OF RsPingProbeHistoryEntry
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
       "Defines a table for storing the results of a rsPing
       operation.  Entries in this table are limited by
       the value of the corresponding rsPingCtlMaxRows
       object.

       An entry in this table is created when the result of
       a rsPing probe is determined.  The initial 2 instance
       identifier index values identify the rsPingCtlEntry
       that a probe result (rsPingProbeHistoryEntry) belongs
       to.  An entry is removed from this table when
       its correspoding rsPingCtlEntry is deleted.

       An implementation of this MIB will remove the oldest
       entry in the rsPingProbeHistoryTable to allow the
       addition of an new entry once the number of rows in
       the rsPingProbeHistoryTable reaches the value specified
       by rsPingCtlMaxRows."
  ::= { rsPingObjects 4 }

rsPingProbeHistoryEntry OBJECT-TYPE
   SYNTAX      RsPingProbeHistoryEntry
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
       "Defines an entry in the rsPingProbeHistoryTable.
       The first two index elements identify the
       rsPingCtlEntry that a rsPingProbeHistoryEntry belongs
       to.  The third index element selects a single
       probe result."
   INDEX {
            rsPingCtlOwnerIndex,
            rsPingCtlTestName,
            rsPingProbeHistoryIndex
          }
   ::= { rsPingProbeHistoryTable 1 }

RsPingProbeHistoryEntry ::=
   SEQUENCE {
       rsPingProbeHistoryIndex         Unsigned32,
       rsPingProbeHistoryResponse      Unsigned32,
       rsPingProbeHistoryStatus        RsPingOperationResponseStatus,
       rsPingProbeHistoryLastRC        Integer32,
       rsPingProbeHistoryTime          DateAndTime
   }

rsPingProbeHistoryIndex OBJECT-TYPE
   SYNTAX      Unsigned32 (1..'ffffffff'h)
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
       "An entry in this table is created when the result of
       a rsPing probe is determined.  The initial 2 instance
       identifier index values identify the rsPingCtlEntry
       that a probe result (rsPingProbeHistoryEntry) belongs
       to.

       An implementation MUST start assigning
       rsPingProbeHistoryIndex values at 1 and wrap after
       exceeding the maximum possible value as defined by
       the limit of this object ('ffffffff'h)."
   ::= { rsPingProbeHistoryEntry 1 }

rsPingProbeHistoryResponse OBJECT-TYPE
   SYNTAX      Unsigned32
   UNITS       "milliseconds"
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "The amount of time measured in milliseconds from when
       a probe was sent to when its response was received or
       when it timed out.  The value of this object is reported
       as 0 when it is not possible to transmit a probe."
   ::= { rsPingProbeHistoryEntry 2 }

rsPingProbeHistoryStatus OBJECT-TYPE
   SYNTAX      RsPingOperationResponseStatus
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "The result of a particular probe done by a remote host."
   ::= { rsPingProbeHistoryEntry 3 }

rsPingProbeHistoryLastRC        OBJECT-TYPE
   SYNTAX      Integer32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "The last implementation method specific reply code received.
       If the ICMP Echo capability is being used then a successful
       probe ends when an ICMP response is received that contains
       the code ICMP_ECHOREPLY(0).  The ICMP responses are defined
       normally in the ip_icmp include file."
   ::= { rsPingProbeHistoryEntry 4 }

rsPingProbeHistoryTime OBJECT-TYPE
   SYNTAX      DateAndTime
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
       "Timestamp for when this probe result was determined."
   ::= { rsPingProbeHistoryEntry 5 }


-- Notification Definition section

rsPingProbeFailed NOTIFICATION-TYPE
     OBJECTS {
       rsPingCtlTargetAddressType,
       rsPingCtlTargetAddress,
       rsPingResultsOperStatus,
       rsPingResultsIpTargetAddressType,
       rsPingResultsIpTargetAddress,
       rsPingResultsMinRtt,
       rsPingResultsMaxRtt,
       rsPingResultsAverageRtt,
       rsPingResultsProbeResponses,
       rsPingResultsSentProbes,
       rsPingResultsRttSumOfSquares,
       rsPingResultsLastGoodProbe
     }
     STATUS  current
     DESCRIPTION
         "Generated when a probe failure is detected when the
         corresponding rsPingCtlTrapGeneration object is set to
         probeFailure(0) subject to the value of
         rsPingCtlTrapProbeFailureFilter.  The object
         rsPingCtlTrapProbeFailureFilter can be used to specify the
         number of successive probe failures that are required
         before this notification can be generated."
     ::= { rsPingNotifications 1 }

rsPingTestFailed NOTIFICATION-TYPE
     OBJECTS {
       rsPingCtlTargetAddressType,
       rsPingCtlTargetAddress,
       rsPingResultsOperStatus,
       rsPingResultsIpTargetAddressType,
       rsPingResultsIpTargetAddress,
       rsPingResultsMinRtt,
       rsPingResultsMaxRtt,
       rsPingResultsAverageRtt,
       rsPingResultsProbeResponses,
       rsPingResultsSentProbes,
       rsPingResultsRttSumOfSquares,
       rsPingResultsLastGoodProbe
     }
     STATUS  current
     DESCRIPTION
         "Generated when a rsPing test is determined to have failed
         when the corresponding rsPingCtlTrapGeneration object is
         set to testFailure(1).  In this instance
         rsPingCtlTrapTestFailureFilter should specify the number of
         probes in a test required to have failed in order to
         consider the test as failed."
     ::= { rsPingNotifications 2 }

rsPingTestCompleted NOTIFICATION-TYPE
     OBJECTS {
       rsPingCtlTargetAddressType,
       rsPingCtlTargetAddress,
       rsPingResultsOperStatus,
       rsPingResultsIpTargetAddressType,
       rsPingResultsIpTargetAddress,
       rsPingResultsMinRtt,
       rsPingResultsMaxRtt,
       rsPingResultsAverageRtt,
       rsPingResultsProbeResponses,
       rsPingResultsSentProbes,
       rsPingResultsRttSumOfSquares,
       rsPingResultsLastGoodProbe
     }
     STATUS  current
     DESCRIPTION
         "Generated at the completion of a rsPing test when the
         corresponding rsPingCtlTrapGeneration object is set to
         testCompletion(4)."
     ::= { rsPingNotifications 3 }

-- Conformance information
-- Compliance statements

rsPingCompliances OBJECT IDENTIFIER ::= { rsPingConformance 1 }
rsPingGroups      OBJECT IDENTIFIER ::= { rsPingConformance 2 }

-- Compliance statements

rsPingCompliance MODULE-COMPLIANCE
   STATUS  current
   DESCRIPTION
           "The compliance statement for the REDSTONE-PING-MIB."
   MODULE  -- this module
       MANDATORY-GROUPS {
                           rsPingGroup,
                           rsPingNotificationsGroup
                         }
       GROUP rsPingTimeStampGroup
       DESCRIPTION
           "This group is mandatory for implementations that have
           access to a system clock and are capable of setting
           the values for DateAndTime objects.  It is RECOMMENDED
           that when this group is not supported that the values
           for the objects in this group be reported as
           '0000000000000000'H."

       OBJECT rsPingMaxConcurrentRequests
       MIN-ACCESS  read-only
       DESCRIPTION
           "The agent is not required to support set
           operations to this object."

       OBJECT rsPingCtlStorageType
       MIN-ACCESS  read-only
       DESCRIPTION
           "Write access is not required.  It is also allowed
           for implementations to support only the volatile
           StorageType enumeration."

       OBJECT rsPingCtlType
       MIN-ACCESS  read-only
       DESCRIPTION
           "Write access is not required.  In addition, the only
           value that MUST be supported by an implementation is
           rsPingIcmpEcho."

       OBJECT rsPingCtlByPassRouteTable
       MIN-ACCESS  read-only
       DESCRIPTION
           "This object is not required by implementations that
           are not capable of its implementation.  The function
           represented by this object is implementable if the
           setsockopt SOL_SOCKET SO_DONTROUTE option is
           supported."

       OBJECT rsPingCtlSourceAddressType
       SYNTAX  RsPingInetAddressType { unknown(0), ipv4(1), ipv6(2) }
       MIN-ACCESS  read-only
       DESCRIPTION
           "This object is not required by implementations that
           are not capable of binding the send socket with a
           source address. An implementation is only required to
           support IPv4 and IPv6 addresses."

       OBJECT rsPingCtlSourceAddress
       SYNTAX  RsPingInetAddress (SIZE(0|4|16))
       MIN-ACCESS  read-only
       DESCRIPTION
           "This object is not required by implementations that
           are not capable of binding the send socket with a
           source address. An implementation is only required to
           support IPv4 and globally unique IPv6 addresses."

       OBJECT rsPingCtlIfIndex
       MIN-ACCESS  read-only
       DESCRIPTION
           "Write access is not required.   When write access is
           not supported return a 0 as the value of this object.
           A value of 0 means that the function represented by
           this option is not supported."

       OBJECT rsPingCtlDSField
       MIN-ACCESS  read-only
       DESCRIPTION
           "Write access is not required.   When write access is
           not supported return a 0 as the value of this object.
           A value of 0 means that the function represented by
           this option is not supported."

       OBJECT rsPingResultsIpTargetAddressType
       SYNTAX  RsPingInetAddressType { unknown(0), ipv4(1), ipv6(2) }
       DESCRIPTION
           "An implementation is only required to
           support IPv4 and IPv6 addresses."

       OBJECT rsPingResultsIpTargetAddress
       SYNTAX  RsPingInetAddress (SIZE(0|4|16))
       DESCRIPTION
           "An implementation is only required to
           support IPv4 and globally unique IPv6 addresses."

   ::= { rsPingCompliances 1 }

-- MIB groupings

rsPingGroup OBJECT-GROUP
  OBJECTS {
            rsPingMaxConcurrentRequests,
            rsPingCtlTargetAddressType,
            rsPingCtlTargetAddress,
            rsPingCtlDataSize,
            rsPingCtlTimeOut,
            rsPingCtlProbeCount,
            rsPingCtlAdminStatus,
            rsPingCtlDataFill,
            rsPingCtlFrequency,
            rsPingCtlMaxRows,
            rsPingCtlStorageType,
            rsPingCtlTrapGeneration,
            rsPingCtlTrapProbeFailureFilter,
            rsPingCtlTrapTestFailureFilter,
            rsPingCtlType,
            rsPingCtlDescr,
            rsPingCtlByPassRouteTable,
            rsPingCtlSourceAddressType,
            rsPingCtlSourceAddress,
            rsPingCtlIfIndex,
            rsPingCtlDSField,
            rsPingCtlRowStatus,
            rsPingResultsOperStatus,
            rsPingResultsIpTargetAddressType,
            rsPingResultsIpTargetAddress,
            rsPingResultsMinRtt,
            rsPingResultsMaxRtt,
            rsPingResultsAverageRtt,
            rsPingResultsProbeResponses,
            rsPingResultsSentProbes,
            rsPingResultsRttSumOfSquares,
            rsPingProbeHistoryResponse,
            rsPingProbeHistoryStatus,
            rsPingProbeHistoryLastRC
          }
  STATUS  current
  DESCRIPTION
      "The group of objects that comprise the remote rsPing
      capability."
   ::= { rsPingGroups 1 }

rsPingTimeStampGroup OBJECT-GROUP
  OBJECTS {
            rsPingResultsLastGoodProbe,
            rsPingProbeHistoryTime
          }
  STATUS  current
  DESCRIPTION
      "The group of DateAndTime objects."
   ::= { rsPingGroups 2 }

rsPingNotificationsGroup NOTIFICATION-GROUP
  NOTIFICATIONS {
            rsPingProbeFailed,
            rsPingTestFailed,
            rsPingTestCompleted
         }
  STATUS        current
  DESCRIPTION
      "The notification which are required to be supported by
      implementations of this MIB."
  ::= { rsPingGroups 3 }

END